package interfaces;

import helpers.Categoria;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Comparator;
import java.util.Observer;
import java.util.TreeMap;
import java.util.TreeSet;

import exceptions.ClienteErroLoginException;
import exceptions.ClienteNaoEncontradoException;
import exceptions.CreditoInsuficienteException;

public interface ServerInterface extends Remote {

	public int quantidadeProdutosCategoria(Categoria c) throws RemoteException;

	public void removeAoCarrinho(ProdutoInterface p, int quantidade)
			throws RemoteException;

	public ClienteInterface updateCliente(String nome, String login,
			String senha, String telefone, String rua, String numero,
			String adicional, String cep, ClienteInterface cliente)
			throws RemoteException;

	public ClienteInterface getClienteByLogin(String login, String passwd)
			throws RemoteException, ClienteNaoEncontradoException,
			ClienteErroLoginException;

	public ClienteInterface getClienteByLogin(String login)
			throws RemoteException, ClienteNaoEncontradoException,
			ClienteErroLoginException;

	public TreeSet<ProdutoInterface> getProdutosByNome(
			Comparator<ProdutoInterface> c, int primeiro, int quantidade,
			String nome) throws RemoteException;

	public TreeSet<ProdutoInterface> getProdutosByCategoriaFabricante(
			Comparator<ProdutoInterface> comparator, int primeiro,
			int quantidade, Categoria cat, String fabricante)
			throws RemoteException;

	public int getQuantidadeByNome(Comparator<ProdutoInterface> c,
			int primeiro, int quantidade, String nome) throws RemoteException;

	public int getQuantidadeByCategoriaFabricante(
			Comparator<ProdutoInterface> comparator, int primeiro,
			int quantidade, Categoria cat, String fabricante)
			throws RemoteException;

	public void adicionaAoCarrinho(ProdutoInterface p, int quantidade)
			throws RemoteException;

	public boolean esvaziarCarrinho(TreeMap<ProdutoInterface, Integer> a)
			throws RemoteException;

	public boolean removeProdutoCarrinho(ProdutoInterface p, int quantidade)
			throws RemoteException;

	public boolean enviaEmailEsqueceu(String login) throws RemoteException;

	public void addObserver(Observer o) throws RemoteException;

	public void efetuarCompra(ClienteInterface clienteInterface,
			TreeMap<ProdutoInterface, Integer> treeMap, double total)
			throws CreditoInsuficienteException, RemoteException;

}
